#!/usr/bin/env python
# coding: utf-8

import tornado.web
import tornado.httpserver
import tornado.ioloop
import tornado.options
from tornado.options import options, define
from tornado.web import url, RequestHandler

'''
对于路由中的字典，会传入到对应的RequestHandler的initialize()方法中
'''
define("port", default=8000, type=int, help="run server on the given port.")

class IndexHandler(RequestHandler):
    def get(self):
        python_url = self.reverse_url("python_url")  #通过名称反解出url
        self.write('<a href="%s">link1</a>'%python_url)

class CrazyHandler(RequestHandler):
    def initialize(self, subject):
        self.subject = subject
    def get(self):
        self.write(self.subject)

if __name__ == '__main__':
    tornado.options.parse_command_line()
    '''
    debug=True,开启开发调试模式，有以下特点：
    1）自动重启，tornado应用会监控我们的源代码文件，当有改动保存后便会重启程序，这可以减少我们手动重启程序的次数。需要注意的是，一旦我们保存的更改有错误，自动重启会导致程序报错而退出，从而需要我们保存修正错误后手动启动程序。这一特性也可单独通过autoreload=True设置；
    2）取消缓存编译的模板，可以单独通过compiled_template_cache=False来设置；
    3）取消缓存静态文件hash值，可以单独通过static_hash_cache=False来设置；
    4）提供追踪信息，当RequestHandler或者其子类抛出一个异常而未被捕获后，会生成一个包含追踪信息的页面，可以单独通过serve_traceback=True来设置。
    '''
    app = tornado.web.Application([
        (r'/', IndexHandler),
        (r'/spring', CrazyHandler, {"subject": "java"}),
        url(r'/python', CrazyHandler, {"subject": "python"}, name="python_url")
    ], debug=True)
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()
    '''
    http://localhost:8000/spring       return java
    http://localhost:8000/             return <a>link1</a>
    http://localhost:8000/python       return python
    '''